# 人工智能NLP-Agent数字人项目-02-日程提醒任务工单V1.1-20250217
import abc
import sqlite3
from typing import Any

from langchain.tools import BaseTool


class QueryTimerDB(BaseTool, abc.ABC):
    # 工具名称
    name = "QueryTimerDB"
    # 工具描述，明确告知使用方式和返回数据信息
    description = "用于查询所有日程，返回的数据里包含3个参数:时间、循环规则（如:'1000100'代表星期一和星期五循环，'0000000'代表不循环）、执行的事项"

    def __init__(self):
        # 调用父类的初始化方法
        super().__init__()

    async def _arun(self, *args: Any, **kwargs: Any) -> Any:
        # 用例中没有用到 arun 不予具体实现
        pass

    def _run(self, para: str) -> str:
        try:
            # 连接到数据库
            with sqlite3.connect('timer.db') as conn:
                cursor = conn.cursor()
                # 执行查询操作，查询 timer 表中的所有记录
                cursor.execute("SELECT * FROM timer")
                # 获取所有查询结果
                rows = cursor.fetchall()

                if not rows:
                    # 如果没有查询到记录，返回相应提示信息
                    return "未找到任何日程记录。"

                # 定义结果列表，用于存储格式化后的记录
                formatted_result = []
                for row in rows:
                    # 假设 row 包含时间、循环规则、执行事项三个参数
                    time, cycle_rule, task = row[:3]
                    # 格式化每条记录
                    formatted_row = f"时间: {time}, 循环规则: {cycle_rule}, 执行的事项: {task}"
                    formatted_result.append(formatted_row)

                # 将格式化后的记录用换行符连接成字符串
                result_str = "\n".join(formatted_result)
                return result_str

        except sqlite3.Error as e:
            # 若数据库操作出现错误，返回错误信息
            return f"数据库错误: {str(e)}"


if __name__ == "__main__":
    # 创建 QueryTimerDB 工具实例
    tool = QueryTimerDB()
    # 调用工具的 run 方法进行测试
    result = tool.run("")
    print(result)